package edu.qqcui.study.config;


import java.awt.*;

import edu.qqcui.study.bean.Person;
import edu.qqcui.study.condition.LinuxCondition;
import edu.qqcui.study.condition.WindowsCondition;
import edu.qqcui.study.service.BookService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.*;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;

/**
 * 配置类就相当于以前的配置文件
 *
 * @author cuiqingqiang
 * @version 1.0
 * @date 2021-06-26 10:36
 **/
@Configuration // 告诉spring，这是一个配置类
//@ComponentScan(value = "edu.qqcui.study", excludeFilters = {
//		@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {Controller.class})
//})
@ComponentScan(value = "edu.qqcui.study", includeFilters = {
//		@Filter(type = FilterType.ANNOTATION, value = {Controller.class}),
//		@Filter(type = FilterType.ASSIGNABLE_TYPE, value = {BookService.class}),
		@Filter(type = FilterType.CUSTOM, value = {MyTypeFilter.class})
}, useDefaultFilters = false)
// ComponentScan value : 表示需要自动扫描的包路径
// excludeFilters = Filter[]，表示按照指定的规则来排除一些组件
// includeFilters = Filter[]，表示按照指定的规则来加载一些组件，必须将useDefaultFilters 设置为 false
// FilterType.ANNOTATION : 按照注解进行过滤
// FilterType.ASSIGNABLE_TYPE ： 按照类进行过滤
// FilterType.ASPECTJ ： 按照ASPECTJ表达式过滤
// FilterType.REGEX ： 按照正则表达式过滤
// FilterType.CUSTOM ： 按照自定义过滤器进行过滤
@Conditional({WindowsCondition.class})
public class MainConfig {

	/**
	 * 给容器中注册一个Bean，类型为返回值的类型，id默认使用方法名作为id
	 * 如果给定了value的值，则以给定的值作为id
	 * @return Person类的一个实例
	 */
	@Bean(value = "person")
	public Person getPerson() {
		return new Person("lisi", 20);
	}

}
